package com.imast.android.bys.ui;

import java.io.IOException;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.imast.android.bys.BySApplication;
import com.imast.android.bys.R;
import com.imast.android.bys.io.model.CarroCompraItem;
import com.imast.android.bys.io.model.DatosCompra;
import com.imast.android.bys.io.model.FormaPago;
import com.imast.android.bys.io.model.Pedido;
import com.imast.android.bys.util.ServerUtils;

import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.widget.RadioGroup.OnCheckedChangeListener;

public class PagoHelper implements OnCheckedChangeListener{

	private FragmentActivity mActivity;
	private ActionBar actionBar;
	
	private LinearLayout llMedioPago;
	private LinearLayout llTarjeta;
	private LinearLayout llDetalleEfectivo;
	
	private RadioGroup rgMedioPago;
	private RadioGroup rgTarjeta;
	private RadioGroup rgDetalleEfectivo;
	
	private ImageView imgTarjeta;
	
	private FormaPago formaPago;
	
	public FragmentActivity getActivity() {
		return mActivity;
	}
	
	public ActionBar getActionBar() {
		return actionBar;
	}
	
	public LinearLayout getLlMedioPago() {
		return llMedioPago;
	}

	public LinearLayout getLlTarjeta() {
		return llTarjeta;
	}

	public LinearLayout getLlDetalleEfectivo() {
		return llDetalleEfectivo;
	}

	public RadioGroup getRgMedioPago() {
		return rgMedioPago;
	}

	public RadioGroup getRgTarjeta() {
		return rgTarjeta;
	}

	public RadioGroup getRgDetalleEfectivo() {
		return rgDetalleEfectivo;
	}

	public ImageView getImgTarjeta() {
		return imgTarjeta;
	}

	public PagoHelper(FragmentActivity mActivity, View rootView) {
		
		this.mActivity = mActivity;
		this.actionBar = ((ActionBarActivity)mActivity).getSupportActionBar();
        
		this.llMedioPago = (LinearLayout)rootView.findViewById(R.id.ll_medio_pago);
		this.llTarjeta = (LinearLayout)rootView.findViewById(R.id.ll_tarjeta);
		this.llDetalleEfectivo = (LinearLayout)rootView.findViewById(R.id.ll_detalle_efectivo);
		
		this.rgMedioPago = (RadioGroup)rootView.findViewById(R.id.rgroupMedioPago);
		this.rgTarjeta = (RadioGroup)rootView.findViewById(R.id.rgroupTarjeta);
		
		this.imgTarjeta = (ImageView)rootView.findViewById(R.id.imgTarjeta);
		
		formaPago = new FormaPago();
		
        initConfig();
        
	}
	
	private void initConfig(){
		
		getRgMedioPago().setOnCheckedChangeListener(this);
		getRgMedioPago().check(R.id.rbtnEfectivo);
		
		getRgTarjeta().setOnCheckedChangeListener(this);
		getRgTarjeta().check(R.id.rbtnVisa);
		
		
	}
	
	private void setVisibility(LinearLayout ll, int visible){
		ll.setVisibility(visible);
	}

	@Override
	public void onCheckedChanged(RadioGroup group, int checkedId) {
		
		switch (group.getId()) {
			default:
				onRadioChecked(checkedId);
				break;
		}
		
	}
	
	public void enviarPedido(){
		
		if (formaPago.getTipoPago() <= 0){
			Toast.makeText(getActivity().getApplicationContext(), "Falta Seleccionar Tipo de Pago", Toast.LENGTH_SHORT).show();
			return;
		}
		
		if (formaPago.getTipoTarjeta() <= 0){
			Toast.makeText(getActivity().getApplicationContext(), "Falta Seleccionar Tarjeta", Toast.LENGTH_SHORT).show();
			return;
		}
		
		BySApplication app = (BySApplication) getActivity().getApplication();
		app.getPedido().setFormaPago(formaPago);
		app.getPedido().setLstCarroCompra(app.getLstCompra());		
		
		new EnviarPedidoTask().execute(app.getPedido());
		
	}
	
	private void onRadioChecked(int checkedId){
		switch(checkedId){
			case R.id.rbtnEfectivo:
				setVisibility(getLlTarjeta(), View.GONE);
	        	setVisibility(getLlDetalleEfectivo(), View.VISIBLE);
	        	formaPago.setTipoPago(1);
				break;
			case R.id.rbtnTarjeta:
				setVisibility(getLlDetalleEfectivo(), View.GONE);
	        	setVisibility(getLlTarjeta(), View.VISIBLE);
	        	formaPago.setTipoPago(2);
	        	break;
			case R.id.rbtnVisa:
				getImgTarjeta().setImageResource(R.drawable.ic_tar_visa);
				formaPago.setTipoTarjeta(1);
				break;
			case R.id.rbtnMastercard:
				getImgTarjeta().setImageResource(R.drawable.ic_tar_mastercard);
				formaPago.setTipoTarjeta(2);
				break;
			case R.id.rbtnDiscover:
				getImgTarjeta().setImageResource(R.drawable.ic_tar_discover);
				formaPago.setTipoTarjeta(3);
				break;
		}
	}
	
	class EnviarPedidoTask extends AsyncTask<Pedido, Void, String> {
		
		ProgressDialog pDialog = new ProgressDialog(getActivity().getApplicationContext());
		
		@Override
		protected void onPreExecute() {
			pDialog.setTitle("ByS");
			pDialog.setMessage("Enviando Pedido");
			//pDialog.show();
		}
		
		@Override
		protected String doInBackground(Pedido... params) {
			
			String jsonResponse = "";
			
			JSONObject jsonParams = new JSONObject();
			try {
				
				Pedido pedido = params[0];
				
				DatosCompra datosCompra = pedido.getDatosCompra();
				FormaPago formaPago = pedido.getFormaPago();
				List<CarroCompraItem> lstCarro = pedido.getLstCarroCompra();
				
				JSONObject jsonDatosCompra = new JSONObject();
				jsonDatosCompra.put("codCliente", 1);
				jsonDatosCompra.put("direccion", datosCompra.getDireccion());
				jsonDatosCompra.put("dni", datosCompra.getDni());
				jsonDatosCompra.put("telefono", datosCompra.getTelefono());
				jsonDatosCompra.put("nombre", datosCompra.getNombre());
				jsonDatosCompra.put("latitud", datosCompra.getLatitud());
				jsonDatosCompra.put("longitud", datosCompra.getLongitud());
				jsonDatosCompra.put("tipoPago", formaPago.getTipoPago());
				jsonDatosCompra.put("tipoTarjeta", formaPago.getTipoTarjeta());
				jsonDatosCompra.put("estado", 1);
				
				JSONArray jsonLstCarro = new JSONArray();
				for (CarroCompraItem item : lstCarro) {
					JSONObject jsonItem = new JSONObject();
					jsonItem.put("descripcion", item.getProducto().getDescripcion());
					jsonItem.put("imagenUrl", item.getProducto().getThumbilUrl());
					jsonItem.put("codProducto", item.getProducto().getIdProducto());
					jsonItem.put("precio", item.getProducto().getPrecio());
					
					JSONObject jsonProducto = new JSONObject();
					jsonProducto.put("producto", jsonItem);
					jsonProducto.put("precio", item.getProducto().getPrecio());
					jsonProducto.put("cantidad", item.getCantidad());
					jsonProducto.put("subTotal", item.getProducto().getPrecio() * item.getCantidad());
					
					
					jsonLstCarro.put(jsonProducto);
					
				}
				
				JSONObject jsonPedido = new JSONObject();
				jsonPedido.put("datosCompra", jsonDatosCompra);
				jsonPedido.put("lstCarroCompra", jsonLstCarro);
				
				jsonParams.put("pedido", jsonPedido);
				
				Log.e("DATA", jsonParams.toString());
				
				jsonResponse = ServerUtils.sendRequest("/InsertPedido", jsonParams, "POST");
				
			} catch (IOException | JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			return jsonResponse;
		}
		
		@Override
		protected void onPostExecute(String result) {
			
			if (!TextUtils.isEmpty(result)){
				
				pDialog.hide();
				
				if (Boolean.valueOf(result)) {
					Toast.makeText(getActivity().getApplicationContext(), "Pedido Enviado", Toast.LENGTH_SHORT).show();
				}
				else {
					Toast.makeText(getActivity().getApplicationContext(), "No se pudo enviar el Pedido intentelo luego", Toast.LENGTH_SHORT).show();					
				}
				
				
			}
			
			
		}
				
	}
	
}
